변수와 상수
✒️ 2025-05-23 15:16 내용 수정
- 변수는 데이터를 저장하는 메모리 공간으로 재선언이 가능하고, 상수는 변수처럼 데이터를 저장하지만 재선언이 불가능하다.
- 스코프는 JavaScript#스코프(Scope) 참고.
| 선언 키워드 | 스코프 | 재선언 | 재할당 | 호이스팅 |
|---|---|---|---|---|
var |
함수 스코프 | 가능 | 가능 | 선언과 초기화가 함께 호이스팅됨 초기화 전에 접근 가능 (값은 undefined) |
let |
블록 스코프 | 불가능 | 가능 | 선언은 호이스팅되지만 초기화 전 접근 시 ReferenceError 발생 |
const |
블록 스코프 | 불가능 | 불가능 | 선언은 호이스팅되지만 초기화 전 접근 시 ReferenceError 발생 |
1. 변수
데이터를 저장하는 메모리 공간
- Java의 변수(Variables)와 상수(Constant)와 동일하다.
- 초기화하지 않으면 기본값이
undefined로 되어 있다.
var
- 선언과 동시에 초기화하거나, 미리 선언 후 나중에 초기화할 수 있다.
var변수는 재선언할 수 있다.var로 선언한 변수의 경우 호이스팅 시undefined로 변수를 초기화한다.var변수는 함수 레벨 스코프이다.- 함수나 블록(
{})으로 선언한 곳 외부에서 변수를 선언하거나, 블록 내에서var을 사용하지 않고 선언하면 전역 변수가 된다. - JavaScript#스코프(Scope) 참고.
- 함수나 블록(
var n1; // 이 때 n1은 undefined
n1 = 10;
var n1 = 30; // var는 재선언할 수 있다.
var n = 1;
var n = "이름";
let
let변수는 재선언을 할 수 없다.- 값을 새롭게 대입하는 것은 가능하다.
let으로 선언한 변수는 호이스팅 시 변수를 초기화하지 않아 에러가 발생한다.let변수는 블록 레벨 스코프이다.- for문을 사용할 때 증감 변수는
var대신let을 사용해야 한다.(스코프 문제) let로 만든 변수는 함수, 제어문, try-catch에서 지역 변수(블록 변수)가 되고, 전역 변수로 만들고 싶다면let을 사용하지 않고 선언해야 한다.- JavaScript#스코프(Scope) 참고.
- for문을 사용할 때 증감 변수는
var와let의 차이로 인해 현재 변수는let으로 주로 선언한다.
let n1;
n1 = 1;
let n2 = "이름";
2. 상수
- Java의 제어자#1. final 제어자과 비슷하다.
- 값을 한 번 초기화하면 다시 변경할 수 없다.
const
- 일종의 상수 역할을 하는 키워드이며, 재선언과 재할당(값을 다시 변경)할 수 없다.
const로 선언한 상수는 호이스팅JavaScript#호이스팅(Hoisting) 시 상수를 초기화하지 않아 에러가 발생한다.let처럼 블록 레벨 스코프이다. (JavaScript#스코프(Scope))- 표기 규칙#3. Constant 표기
const N1 = 1;
const NAME = "이름";